package com.demo.explore.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.demo.explore.entity.ValidateCode;
import com.demo.explore.sender.ValidateCodeSender;
import com.demo.explore.util.CodeGenerator;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * 创建验证码接口
 *
 * @author Logan
 *
 */
@RestController
@RequestMapping("/code")
public class ValidateCodeController {

    /**
     * 验证码存放Session中的key
     */
    public static final String SESSION_CODE_KEY = "code";

    /**
     * 验证码长度，可以提取到配置中，此处只做演示，简单处理
     */
    private int length = 6;

    /**
     * 过期分钟数，可以提取到配置中，此处只做演示，简单处理
     */
    private int validityMinutes = 30;

    /**
     * 验证码发送器
     */
    @Autowired
    private ValidateCodeSender validateCodeSender;

    /**
     * 创建短信验证码接口
     *
     * @param request 请求对象
     * @param response 响应对象
     * @param mobile 手机号
     */
    @GetMapping("/sms")
    public void createSmsCode(HttpServletRequest request, HttpServletResponse response, String mobile) {
        ValidateCode validateCode = CodeGenerator.generate(length, validityMinutes);

        // 存储验证码到Session中，登录时验证
        request.getSession().setAttribute(SESSION_CODE_KEY, validateCode);

        // 调用验证码发送器发送短信验证码
        validateCodeSender.sendSmsCode(response, mobile, validateCode.getCode());
    }

}